<template>
  <!-- 质量整改通知单的操作页，包括：新增，查看，编辑，验证, 生成整改单 -->
  <base-breadcrumb :title="title">
    <a-spin :spinning="loading[0] || loading[1]">
      <!-- 基本信息 -->
      <BaseInfo ref="BaseInfo" :form="form" :onlyRead="onlyRead" @getPostInfo="getPostInfo" />
      <!-- 问题信息 -->
      <ProblemInfo ref="ProblemInfo" :form="form" :onlyRead="onlyRead" :editModel="editModel" :postData="postData" />
      <!-- 验证信息 -->
      <ValidateInfo v-if="editModel == 3 || ($route.query.isOperation == 0&&form.status==3 || form.status==4)" :form="form"
        :editModel="editModel" />
      <!-- 页脚操作栏 -->
      <Footer :form="form" :editModel="editModel" :api="api" :id="id" />
    </a-spin>
  </base-breadcrumb>
</template>

<script>
import { rectificationNotice } from '@/api/quality/quality' // 质量api
import { technicalProblemNoticeDealt } from "@/api/technology"
import BaseEditPage from '@/views/baseEditPage' // 编辑详情页基础配置
import BasePrintButton from '@/components/BasePrintButton' // 打印按钮
import BaseInfo from './components/BaseInfo' // 基础信息
import ProblemInfo from './components/ProblemInfo' // 问题信息
import ValidateInfo from './components/ValidateInfo' // 验证信息
import Footer from './components/Footer' // 页脚操作栏


export default {
  name: 'a' + Date.now(),
  extends: new BaseEditPage(),
  components: {
    BasePrintButton,
    BaseInfo,
    ProblemInfo,
    ValidateInfo,
    Footer
  },
  data() {
    return {
      id: void 0, // 业务id
      loading: { 0: false, 1: false }, // 请求加载框
      editModel: '0', // 操作类型：0 新增，1 编辑，2 查看，3 验证，4 生成整改单
      form: {
        // rectifyTerm: '2020-7-10',
        // projectId:"658560713194872832",
        // 表单
        statusName: '',
        checks: [], // 问题信息表格列表
        creatorName: void 0, // 下发人
        createTime: void 0 // 下发时间
      },
      api: rectificationNotice, // 请求api
      titles: ['新增整改通知单', '编辑整改通知单', '查看整改通知单', '验证整改通知单', '生成整改通知单'], // 根据操作类型自适应的标题
      postData: {},//选中的受检单位详细数据
    }
  },
  mounted() {
    // 初始化
    this.init()
  },
  computed: {
    // 只读模式
    onlyRead() {
      return this.editModel == 2 || this.editModel == 3
    }
  },
  methods: {
    /**
     * @description: 初始化
     */
    init() {
      // 当操作为新增和生成整改单,则自动获取下发人和下发时间，否则请求业务详情
      if (this.editModel != 0 && this.editModel != 4) {
        this.loading[0] = true
        technicalProblemNoticeDealt({
            id: this.id
          })
          .then((res) => {
            if (res.data) {
              // 数据预处理
              this.formatData(res.data)
              if( res.data.problems?.length) {
              res.data.problems.forEach((item)=>{
                if(item.rectifyResults?.length) {
                  item.rectifyFileArrays = item.rectifyResults[0].fileArrays
                  item.rectifyDescription = item.rectifyResults[0].description
                }
              })
              }
              // 映射表单
              this.form = res.data
              if(this.editModel == 3) {
                this.form.status = null
              }
              this.form.statusName = this.form.status == 3 ?'合格': '不合格'
              // 若是编辑，则把下发人和下发时间替换
              if (this.editModel === 1) {
                this.form.creatorName = this.$userInfo()?.name
                this.form.createTime = this.$dateFormat(new Date(), 'D')
              }
              // 框架bug，表格右侧操作列固定右侧，高度不会随同行高度自适应，需要手动更新
              // this.$nextTick(() => {
              //   this.$refs.ProblemInfo?.refreshTable()
              // })
            }
          })
          .finally(() => {
            this.loading[0] = false
          })
      } else {
        this.form.creatorName = this.$userInfo()?.name
        this.form.createTime = this.$dateFormat(new Date(), 'D')
      }
    },
    /**
     * @description: 格式化数据
     * @param {*} data：需要格式化的数据
     */
    formatData(data) {
      data.problems = data.problems?.length
        ? data.problems.map((i, index) => {
          i.sort = index + 1;
          i.rectifierCompanyName = data.inspectedUnitName
          // 格式化坐标
          if (i.coordinate) {
            i.coordinate = i.coordinate?.split(';')?.map((e) => {
              const item = e.split(',')
              return {
                x: item[0],
                y: item[1]
              }
            })
          }
          // 格式化工程品质类型
          if (i.specialName) {
            i.specialTypes = [i.specialType, i.specialName]
          }
          if(i.sendUserIds) {
            i.sendUserIds = i.sendUserIds.split(",")
          }
          return i
        })
        : []
      // 格式化验证人
      if (data.acceptanceEmployeeId) {
        // data.acceptanceEmployeeId = [{ id: data.acceptanceEmployeeId, name: data.acceptanceEmployeeName }]
        this.$refs.BaseInfo.personList = [{ id: data.acceptanceEmployeeId, name: data.acceptanceEmployeeName }]
      }
    },
    /**
* @description:获取当前选中的岗位数据
*/
    getPostInfo(data) {
      this.postData = data;
    }
  }
}
</script>